use range::*;
use traits::*;
use std::borrow::Borrow;
use std::collections::Bound;
use std::slice;
impl<T> Len for Vec<T> {
fn len(&self) -> usize { (**self).len() }
}
impl<T> Capacity for Vec<T> {
fn capacity(&self) -> usize { (*self).capacity() }
}
impl<T> Clear for Vec<T> {
fn clear(&mut self){ (*self).clear() }
}
impl<T> ShrinkToFit for Vec<T> {
fn shrink_to_fit(&mut self){ (*self).shrink_to_fit() }
}
impl<T> Reserve for Vec<T> {
fn reserve(&mut self, n: usize){ (*self).reserve(n) }
fn reserve_exact(&mut self, n: usize){ (*self).reserve_exact(n); }
}
impl<'q, T: PartialEq> Contains<&'q T> for Vec<T> {
fn contains(&self, elt: &'q T) -> bool { (**self).contains(elt) }
}
impl<'a, T: 'a> _Get<'a, usize> for Vec<T> {
type Ret = Option<&'a T>;
}
impl<T: 'static> Get<usize> for Vec<T> {
fn get<'a>(&'a self, idx: usize) -> <Self as _Get<'a, usize>>::Ret { (**self).get(idx) }
}
impl<'a, T: 'a> _GetMut<'a, usize> for Vec<T> {
type Ret = Option<&'a mut T>;
}
impl<T: 'static> GetMut<usize> for Vec<T> {
fn get_mut<'a>(&'a mut self, idx: usize) -> <Self as _GetMut<'a, usize>>::Ret { (**self).get_mut(idx) }
}
impl<'a, T: 'a, R> _Get<'a, R> for Vec<T>
where R: RangeArgument<usize>
{
type Ret = &'a [T];
}
impl<T: 'static, R> Get<R> for Vec<T>
where R: RangeArgument<usize>
{
fn get<'a>(&'a self, range: R) -> <Self as _Get<'a, R>>::Ret {
Get::get(&**self, range)
}
}
impl<'a, T: 'a, R> _GetMut<'a, R> for Vec<T>
where R: RangeArgument<usize>
{
type Ret = &'a mut [T];
}
impl<T: 'static, R> GetMut<R> for Vec<T>
where R: RangeArgument<usize>
{
fn get_mut<'a>(&'a mut self, range: R) -> <Self as _GetMut<'a, R>>::Ret {
GetMut::get_mut(&mut**self, range)
}
}
impl<'a, T: 'a> _Iterate<'a> for Vec<T> {
type Iter = slice::Iter<'a, T>;
}
impl<T: 'static> Iterate for Vec<T> {
fn iter<'a>(&'a self) -> <Self as _Iterate<'a>>::Iter { (**self).iter() }
}
impl<'a, T: 'a> _IterateMut<'a> for Vec<T> {
type IterMut = slice::IterMut<'a, T>;
}
impl<T: 'static> IterateMut for Vec<T> {
fn iter_mut<'a>(&'a mut self) -> <Self as _IterateMut<'a>>::IterMut { (**self).iter_mut() }
}
impl<T> Insert<(usize, T)> for Vec<T> {
type Ret = ();
fn insert(&mut self, pair: (usize, T)) -> Self::Ret { (*self).insert(pair.0, pair.1) }
}
impl<T> Insert2<usize, T> for Vec<T> {
type Ret = ();
fn insert(&mut self, idx: usize, val: T) -> Self::Ret { (*self).insert(idx, val) }
}
impl<T> Remove<usize> for Vec<T> {
type Ret = T;
fn remove(&mut self, idx: usize) -> Self::Ret { (*self).remove(idx) }
}
impl<T> PushBack<T> for Vec<T> {
fn push_back(&mut self, val: T) {
(*self).push(val)
}
}
impl<T> PopBack for Vec<T> {
type Val = T;
fn pop_back(&mut self) -> Option<Self::Val> {
(*self).pop()
}
}
use std::collections::btree_map::{self, BTreeMap};
impl<K: Ord, V> OrderedCollection for BTreeMap<K, V> {}
impl<K: Ord, V> Len for BTreeMap<K, V> {
fn len(&self) -> usize { (*self).len() }
}
impl<K: Ord, V> Clear for BTreeMap<K, V> {
fn clear(&mut self){ (*self).clear() }
}
impl<'q, K, V, Q: ?Sized> Contains<&'q Q> for BTreeMap<K, V>
where K: Ord + Borrow<Q>, Q: Ord
{
fn contains(&self, key: &'q Q) -> bool { (*self).contains_key(key) }
}
impl<'a, 'q, K, V: 'a, Q: ?Sized> _Get<'a, &'q Q> for BTreeMap<K, V>
where K: Ord + Borrow<Q>, Q: Ord
{
type Ret = Option<&'a V>;
}
impl<'q, K, V: 'static, Q: ?Sized> Get<&'q Q> for BTreeMap<K, V>
where K: Ord + Borrow<Q>, Q: Ord
{
fn get<'a>(&'a self, key: &'q Q) -> <Self as _Get<'a, &'q Q>>::Ret { (*self).get(key) }
}
impl<'a, 'q, K, V: 'a, Q: ?Sized> _GetMut<'a, &'q Q> for BTreeMap<K, V>
where K: Ord + Borrow<Q>, Q: Ord
{
type Ret = Option<&'a mut V>;
}
impl<'q, K, V: 'static, Q: ?Sized> GetMut<&'q Q> for BTreeMap<K, V>
where K: Ord + Borrow<Q>, Q: Ord
{
fn get_mut<'a>(&'a mut self, key: &'q Q) -> <Self as _GetMut<'a, &'q Q>>::Ret { (*self).get_mut(key) }
}
impl<'a, K: Ord + 'a, V: 'a> _Iterate<'a> for BTreeMap<K, V> {
type Iter = btree_map::Iter<'a, K, V>;
}
impl<K: Ord + 'static, V: 'static> Iterate for BTreeMap<K, V> {
fn iter<'a>(&'a self) -> <Self as _Iterate<'a>>::Iter { (*self).iter() }
}
impl<'a, K: Ord + 'a, V: 'a> _IterateMut<'a> for BTreeMap<K, V> {
type IterMut = btree_map::IterMut<'a, K, V>;
}
impl<K: Ord + 'static, V: 'static> IterateMut for BTreeMap<K, V> {
fn iter_mut<'a>(&'a mut self) -> <Self as _IterateMut<'a>>::IterMut { (*self).iter_mut() }
}
impl<K: Ord, V> Insert<(K, V)> for BTreeMap<K, V> {
type Ret = Option<V>;
fn insert(&mut self, pair: (K, V)) -> Self::Ret { (*self).insert(pair.0, pair.1) }
}
impl<K: Ord, V> Insert2<K, V> for BTreeMap<K, V> {
type Ret = Option<V>;
fn insert(&mut self, key: K, val: V) -> Self::Ret { (*self).insert(key, val) }
}
impl<'q, K, V, Q: ?Sized> Remove<&'q Q> for BTreeMap<K, V>
where K: Ord + Borrow<Q>, Q: Ord
{
type Ret = Option<V>;
fn remove(&mut self, key: &'q Q) -> Self::Ret { (*self).remove(key) }
}
use std::collections::btree_set::{self, BTreeSet};
impl<T: Ord> Len for BTreeSet<T> {
fn len(&self) -> usize { (*self).len() }
}
impl<T: Ord> Clear for BTreeSet<T> {
fn clear(&mut self){ (*self).clear() }
}
impl<'q, T, Q: ?Sized> Contains<&'q Q> for BTreeSet<T>
where T: Ord + Borrow<Q>, Q: Ord
{
fn contains(&self, elt: &'q Q) -> bool { (*self).contains(elt) }
}
impl<'a, T: Ord + 'a> _Iterate<'a> for BTreeSet<T> {
type Iter = btree_set::Iter<'a, T>;
}
impl<T: Ord + 'static> Iterate for BTreeSet<T> {
fn iter<'a>(&'a self) -> <Self as _Iterate<'a>>::Iter { (*self).iter() }
}
impl<T: Ord> Insert<T> for BTreeSet<T> {
type Ret = bool;
fn insert(&mut self, val: T) -> Self::Ret { (*self).insert(val) }
}
impl<'q, T, Q: ?Sized> Remove<&'q Q> for BTreeSet<T>
where T: Ord + Borrow<Q>, Q: Ord
{
type Ret = bool;
fn remove(&mut self, val: &'q Q) -> Self::Ret { (*self).remove(val) }
}